1.5.1 Sales_item类
Sales_tiem类的作用是表示一本书的总销售额、售出册数和平均售价。我们现在不关心这些数据如何储存、如何计算。为了使用一个类,我们不必关心它是如何实现的,只需知道类对象可以执行什么操作。
每个类实际上都定义了一个新的类型,其类型名就是类名。因此,我们的Sales_item类定义了一个名为Sales_item的类型。与内置类型一样,我们可以定义类类型的变量。当我们写下如下语句
Sales_item item;
是想表达item是一个Sales_item类型的对象。我们通常将“一个Sales_item类型的对象”简单说成“一个Sales_item对象”,或更简单的“一个Sales_item”。
除了可以定义Sales_item类型的变量之外,我们还可以:
●调用一个名为isbn的函数从一个Sales_item对象中提取ISBN书号。
●用输入运算符(>>)和输入运算符(<<)读、写Sales_item类型的对象。
●用赋值运算符(=)将一个Sales_item的值赋予另一个Sales_item对象。
●用加法运算符(+)将两个Sales_item对象相加。两个对象必须表示同一本书(相同的ISBN)。加法结果是一个新的Sales_item对象,其ISBN与两个运算对象相同,而其总销售额和售出册数则是两个运算对象的对应值之和。
●使用复合赋值运算符(+=)将一个Sales_item对象加到另一个对象上。
关键概念:类定义了行为
当你读这些程序时,一件要牢记的重要事情是,类Sales_item的作者定义了类对象可以执行的所有动作。即,Sales_item类定义了创建一个Sales_item对象时会发生什么事情,以及对Sales_item对象进行赋值、加法或输入输出运算时会发生什么事情。
一般而言,类的作者决定了类类型对象上可以使用的所有操作。当前,我们所知道的可以在Sales_item对象上执行的全部操作就是本节所列出的那些操作。
读写Sales_item
既然已经知道可以对Sales_item对象执行哪些操作,我们现在就可以编写使用类的程序了。例如,下面的程序从标准库输入读入数据,存入一个Sales_item对象中,然后将Sales_item的内容写回到标准输出:
#include <iostream>
#include "Slaes_item.h"
int main()
{
Sales_item book;
// 读入ISBN号、售出的册数以及销售价格
std::cin >> book;
// 写入ISBN、售出的册数、总销售额和平均价格
std::cout << book << std::endl;
return 0;
}
如果输入:
0-201-70353-X 4 24.99
则输入为:
0-201-70353-X 99.96 24.99
输入表示我们以每本24.99美元的价格售出了四册书,而输出告诉我们总售出册数为4,总销售额为99.96美元,而每册数的平均销售价格为24.99美元。
此程序以两个#include指令开始,其中一个使用了新的形式。包含来自标准库的头文件时,也应该用尖括号(<>)包围头文件名。对于不属于标准库的头文件,则用双引号("")包围。
在main中我们定义了一个名为book的对象,用来保存从标准输入读取的数据。下一条语句读取数据存入对象中,第三条语句将对象打印到标准输出上并打印一个endl。
Sales_item对象的加法
下面是一个更有意思的例子,将两个Sales_item对象相加:
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item1 item2;
std::cin >> item1 >> item2; // 读取一对交易记录
std::cout << item1 + item2 << std::endl; // 打印它们的和
return 0;
}
如果输入如下内容:
0-201-78345-X 3 20.00
0-201-78345-X 2 25.00
则输出为:
0-201-78345-X 5 110 22
此程序开始包含了Sales_item和iostream两个头文件。然后定义了两个Sales_item对象来保存销售记录。我们冲标准输入读取数据,存入两个对象之中。输出表达式完成加法运算并打印结果。
值得注意的是,此程序看起来与第5页的程序非常相似:读取两个输入数据并输出它们的和。造成如此相似的原因是,我们只不过是将运算对象从两个整数变为两个Sales_item而已,但读取与打印和的运算方式没有发生任何变化。两个程序的另一个不同之处是,“和”的概念是完全不一样的。对于int,我们计算传统意义上的和——两个数值的算术加法结果。对于Sales_item对象,我们用了一个全新的“和”的概念——两个Sales_item对象的成员对应相加的结果。
使用文件重定向
当你测试程序时,反复从键盘敲入这些销售记录作为程序的输入,是非常乏味的。大多数操作系统支持文件重定向,这种机制允许我们将标准输入和标准输出与命名文件关联起来:
$ addItems <infile>outfile
假定$是操作系统提示符,我们的加法程序已经编译为名为addItems.exe的可执行文件(在UNIX中是addItems),则上述命令会从一个名为infile的文件读取销售记录,并将输出结果写入到一个名为outfile的文件中,两个文件都位于当前目录中。
普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、《带着修真界仙子们天下无敌》、《剑来》、《修炼成仙的我只想养成女徒弟》、《足控勇者的目标是魔王的丝袜》、《被触手怪养大的少女》、